: findandadd-ilp
	to ilp-businfo
	to ilp-part-off
	to ilp-part-num
	to ilp-lun-off
	to ilp-lun-num
	to ilp-id-off
	to ilp-id-num
	to ilp-node

	ilp-id-num   0 <
	ilp-lun-num  0 < or
	ilp-lun-off  0 < or
	ilp-part-num 0 < or
	ilp-part-off 0 < or
	if
		exit
	then

	ilp-id-num 0= if
		0 to ilp-id-off
	then

	ilp-lun-num 0= if
		0 to ilp-lun-off
	then
	
	ilp-part-num 0= if
		0 to ilp-part-off
	then

	ilp-id-num 0= if
		-1
	else
		0
	then to ilp-id-cnt

	begin
		true to ilp-newphys
		ilp-lun-num 0= if
			-1
		else
			0
		then to ilp-lun-cnt

		begin
			ilp-part-num 0= if
				-1
			else
				0
			then to ilp-part-cnt

			begin
				ilp-node

				ilp-id-off -1 = if
					makefullpathalloc
				else
					makepathalloc
				then to ilp-lhs-len

				to ilp-lhs-ptr
				ilp-id-cnt ilp-id-off +
				ilp-lun-cnt ilp-lun-off +
				ilp-part-cnt ilp-part-off +
				makelocsuffix to ilp-rhs-len to ilp-rhs-ptr

				ilp-lhs-ptr ilp-lhs-len
				ilp-rhs-ptr ilp-rhs-len
				strcatalloc to ilp-tot-len to ilp-tot-ptr

				ilp-tot-ptr ilp-tot-len bpr-new
				ilp-tot-ptr ilp-tot-len ib-newphyspath
				ilp-newphys bpr-set-infobit
				false to ilp-newphys
				ilp-tot-ptr ilp-tot-len ilp-node bpr-set-node
				ilp-tot-ptr ilp-tot-len
				ib-partinpath
				ilp-part-cnt -1 <>
				bpr-set-infobit
				ilp-tot-ptr ilp-tot-len
				ilp-businfo bpr-set-businfo
				ilp-lhs-ptr ilp-lhs-len freemem0
				ilp-tot-ptr ilp-tot-len freemem0
				ilp-part-cnt -1 <> if
					ilp-part-cnt 1+ to ilp-part-cnt
				then
				ilp-part-num 0=
				ilp-part-num ilp-part-cnt = or
			until
			ilp-lun-cnt -1 <> if
				ilp-lun-cnt 1+ to ilp-lun-cnt
			then
			ilp-lun-num 0=
			ilp-lun-num ilp-lun-cnt = or
		until
		ilp-id-cnt -1 <> if
			ilp-id-cnt 1+ to ilp-id-cnt
		then
		ilp-id-num 0=
		ilp-id-num ilp-id-cnt =
		or
	until
	;


: findandadd-block-scsi-8 ( ilp-node )
	8													\ ilp-id-num
	0													\ ilp-id-off
	0													\ ilp-lun-num		
	0													\ ilp-lun-off		
	21													\ ilp-part-num
	1													\ ilp-part-off
	bi-t-scsi bi-t-loc << bi-s-narrow bi-s-loc << or	\ ilp-businfo
	findandadd-ilp
	;


: findandadd-block-scsi-16 ( ilp-node )
	10													 \ ilp-id-num
	0													 \ ilp-id-off
	0													 \ ilp-lun-num
	0													 \ ilp-lun-off
	21													 \ ilp-part-num
	1													 \ ilp-part-off
	bi-t-scsi bi-t-loc << bi-s-wide bi-s-loc << or		 \ ilp-businfo
	findandadd-ilp
	;

0 value scsi-range-low
0 value scsi-range-high

: findandadd-block-scsi-extended ( ilp-node )
	scsi-range-low										\ ilp-id-off
	scsi-range-high 1+ over -							\ ilp-id-num
	dup 0> if
		swap											
	else
		2drop
		10												\ ilp-id-num
		0												\ ilp-id-off
	then												
	0													\ ilp-lun-num
	0													\ ilp-lun-off
	21													\ ilp-part-num
	1													\ ilp-part-off
	bi-t-scsi bi-t-loc << bi-s-extended bi-s-loc << or	\ ilp-businfo
	findandadd-ilp
	;


: findandadd-block-ide ( ilp-node )
	2													\ ilp-id-num									
	0													\ ilp-id-off									
	0													\ ilp-lun-num									
	0													\ ilp-lun-off									
	21													\ ilp-part-num									
	1													\ ilp-part-off									
	bi-t-ata bi-t-loc <<								\ ilp-businfo														
	findandadd-ilp																					
	;


: findandadd-block-ata-4 ( ilp-node )
	1													\ ilp-id-num	
	-1													\ ilp-id-off	
	0													\ ilp-lun-num	
	0													\ ilp-lun-off	
	21													\ ilp-part-num	
	1													\ ilp-part-off	
	bi-t-ata bi-t-loc <<								\ ilp-businfo						
	findandadd-ilp														
	;


: findandadd-block-sata ( ilp-node )
	1													\ ilp-id-num	
	-1													\ ilp-id-off	
	0													\ ilp-lun-num	
	0													\ ilp-lun-off	
	21													\ ilp-part-num	
	1													\ ilp-part-off	
	bi-t-sata bi-t-loc <<								\ ilp-businfo				
	findandadd-ilp
	;


: findandadd-block-fdc ( ilp-node )
	{ ilp-node ; ... }									
	ilp-node makepathalloc -> local_2 -> local_1
	local_1 local_2 bpr-new
	local_1 local_2 ib-newphyspath
	true bpr-set-infobit
	local_1 local_2 ilp-node bpr-set-node
	local_1 local_2 ib-floppypath
	true bpr-set-infobit
	local_1 local_2
	bi-t-floppy bi-t-loc << bpr-set-businfo
	local_1 local_2 freemem0
	;


: findandadd-block-fw ( ilp-node )
	{ ilp-node ; ... }									
	ilp-node makefullpathalloc -> local_2 -> local_1
	local_1 local_2 bpr-new
	local_1 local_2 ib-newphyspath
	true bpr-set-infobit
	local_1 local_2 ilp-node bpr-set-node
	local_1 local_2 ib-floppypath
	true bpr-set-infobit
	local_1 local_2
	bi-t-fw bi-t-loc << bpr-set-businfo
	local_1 local_2 freemem0
	ilp-node
	1													\ ilp-id-num				
	-1													\ ilp-id-off				
	0													\ ilp-lun-num				
	0													\ ilp-lun-off				
	21													\ ilp-part-num				
	1													\ ilp-part-off				
	bi-t-fw bi-t-loc <<									\ ilp-businfo											
	findandadd-ilp																
	;


: findandadd-block-usb ( ilp-node )
	{ ilp-node ; ... }
	ilp-node makefullpathalloc -> local_2 -> local_1
	local_1 local_2 bpr-new
	local_1 local_2 ib-newphyspath
	true bpr-set-infobit
	local_1 local_2 ilp-node bpr-set-node
	local_1 local_2
	ib-floppypath
	true bpr-set-infobit
	local_1 local_2
	bi-t-usb bi-t-loc << bpr-set-businfo
	local_1 local_2 freemem0
	ilp-node
	1													\ ilp-id-num	
	-1													\ ilp-id-off	
	0													\ ilp-lun-num	
	0													\ ilp-lun-off	
	21													\ ilp-part-num	
	1													\ ilp-part-off	
	bi-t-usb bi-t-loc <<								\ ilp-businfo	
	findandadd-ilp										
	;
